//package org.jaaksi.customviewdemo.view
//
//import android.animation.Animator
//import android.animation.AnimatorListenerAdapter
//import android.content.Context
//import android.os.Handler
//import android.os.Looper
//import android.util.AttributeSet
//import android.util.TypedValue
//import android.view.LayoutInflater
//import android.view.MotionEvent
//import android.view.View
//import android.view.ViewTreeObserver
//import android.widget.FrameLayout
//import android.widget.ImageView
//import android.widget.TextView
//import kotlinx.android.synthetic.main.layout_gender_select.view.*
//import org.jaaksi.customviewdemo.R
//import org.jaaksi.customviewdemo.config.WorkoutConst
//import kotlin.math.abs
//
//class GenderSelectView : FrameLayout {
//    companion object {
//        //初始状态
//        const val STATUS_INIT = 0
//
//        //选择男性状态
//        const val STATUS_MALE = 1
//
//        //选择女性状态
//        const val STATUS_FEMALE = 2
//    }
//
//    private val scope by lazy {
//        CoroutineScope(Dispatchers.Main)
//    }
//
//    //请求选中的性别
//    private var pendingSelectGender = 0
//
//    //动画时间
//    private val ANIM_DURATION = 300L
//    private val ANIM_DURATION_NEXT = 600L
//
//    //归位动画期间x1设置为-1000000
//    private val DISABLE_X = -1000000f
//
//    //未选中性别的大小比例
//    private val MIN_SCALE = 0.7f
//
//    //手指按下坐标
//    private var x1 = 0f
//    private var y1 = 0f
//
//    //手指移动后坐标
//    private var x2 = 0f
//    private var y2 = 0f
//
//    //滑动距离
//    private var offset = 0f
//
//    //当前状态
//    private var currStatus = STATUS_INIT
//
//    //图片宽度
//    private var imageWidth = 0
//
//    //图片左右的间距
//    private var edgeSpace = 0f
//
//    //图片之间的间距
//    private var middleSpace = 0f
//
//    //文字的初始Y坐标
//    private var textInitY = 0f
//
//    //init状态滑动到中心需要的距离
//    private var maxInitScrollDistance = 0f
//
//    //选中状态滑动到另外一个状态需要的距离
//    private var maxSelectScrollDistance = 0f
//
//    //男/女选择状态 图片间距
//    private var selectedStatusSpace = 0f
//
//    //男性选中状态 女性的最终x坐标
//    private var smallFemaleFinalX = 0f
//
//    //init状态女性初始坐标
//    private var femaleInitX = 0f
//
//    //女性选中状态 男性的最终x坐标
//    private var smallMaleFinalX = 0f
//
//    //init状态男性初始坐标
//    private var maleInitX = 0f
//
//    //男性文字初始坐标
//    private var maleTextInitX = 0f
//
//    //女性文字初始坐标
//    private var femaleTextInitX = 0f
//
//    //是否正在进行归位动画
//    private var isRevertAnimRunning = false
//
//    //手指是否移动过
//    private var hasMove = false
//
//    //是否禁用触摸事件
//    private var enableTouch = true
//
//    private var listener: GenderSelectViewListener? = null
//
//    private val animHandler = Handler(Looper.getMainLooper())
//
//    //是否正在进行返回动画
//    private var isBackAnimRunning = false
//
//    //是否正在进行按钮动画
//    private var isBtnAnimRunning = false
//
//    //上次选择focus area时的性别
//    private var statusWhenSelectFocusArea = 0
//
//    //选中的部位
//    private var selectedArea = mutableListOf<Int>()
//
//    //尺寸调整是否结束
//    private var hasSizeChangeComplete = false
//
//    //是否设置了默认选中部位
//    private var hasSetDefSelectedArea = false
//
//    //按钮列表
//    private val btnList: List<TextView> by lazy {
//        mutableListOf(
//            tv_full_body,
//            tv_arm,
//            tv_chest_or_abs,
//            tv_abs_or_butt,
//            tv_leg
//        )
//    }
//
//    //按钮选中图标列表
//    private val btnCheckIvList: List<ImageView> by lazy {
//        mutableListOf(
//            iv_check_full_body,
//            iv_check_arm,
//            iv_check_chest_or_abs,
//            iv_check_abs_or_butt,
//            iv_check_leg
//        )
//    }
//
//    //男性连线
//    private val maleLineList by lazy {
//        mutableListOf<View>(
//            line_arm_male, line_chest_male, line_abs_male, line_leg_male
//        )
//    }
//
//    //女性连线
//    private val femaleLineList by lazy {
//        mutableListOf<View>(
//            line_arm_female, line_abs_female, line_butt_female, line_leg_female
//        )
//    }
//
//    private val pointAndLines by lazy {
//        mutableListOf<View>(
//            point_arm_female, point_abs_female, point_butt_female, point_leg_female,
//            point_arm_male, point_chest_male, point_abs_male, point_leg_male,
//            line_arm_male, line_chest_male, line_abs_male, line_leg_male,
//            line_arm_female, line_abs_female, line_butt_female, line_leg_female
//        )
//    }
//
//    //大于这个值就算是滑动而非点击
//    private val minMoveDis by lazy {
//        DisplayUtils.dip2px(context, 6f)
//    }
//
//    private val delayHandler = Handler(Looper.getMainLooper())
//
//    constructor(context: Context) : super(context) {
//        initView()
//    }
//
//    constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) {
//        initView()
//    }
//
//    constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(
//        context,
//        attributeSet,
//        defStyleAttr
//    ) {
//        initView()
//    }
//
//    fun setListener(listener: GenderSelectViewListener?) {
//        this.listener = listener
//    }
//
//    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
//        super.onSizeChanged(w, h, oldw, oldh)
//        // 当size发生变化时取消动画
//        cancelAllAnim()
//        setSelectViewSize()
//    }
//
//    private fun initView() {
//        LayoutInflater.from(context).inflate(R.layout.layout_gender_select, this)
////        updateSize()
//        updateBtnList()
//        btnList.withIndex().forEach { (index, btn) ->
//            btn.setOnClickListener {
//                if (btn.id == R.id.tv_full_body) {
//                    selectedArea.clear()
//                    if (selectedArea.contains(WorkoutConst.BodyPart.FULL_BODY)) {
//                        selectedArea.remove(WorkoutConst.BodyPart.FULL_BODY)
//                    } else {
//                        selectedArea.add(WorkoutConst.BodyPart.FULL_BODY)
//                    }
//                    if (btnCheckIvList.getOrNull(0)?.visibility == View.VISIBLE) {
//                        unCheckBtn(0)
//                    } else {
//                        unCheckAllBtn()
//                        checkBtn(0)
//                    }
//                } else {
//                    unCheckBtn(0)
//                    selectedArea.remove(WorkoutConst.BodyPart.FULL_BODY)
//                    val areaId = when (btn.id) {
//                        R.id.tv_arm -> WorkoutConst.BodyPart.ARM
//                        R.id.tv_chest_or_abs -> {
//                            if (currStatus == STATUS_MALE) {
//                                WorkoutConst.BodyPart.CHEST
//                            } else {
//                                WorkoutConst.BodyPart.ABS
//                            }
//                        }
//                        R.id.tv_abs_or_butt -> {
//                            if (currStatus == STATUS_MALE) {
//                                WorkoutConst.BodyPart.ABS
//                            } else {
//                                WorkoutConst.BodyPart.BUTT
//                            }
//                        }
//                        else -> WorkoutConst.BodyPart.LEG
//                    }
//                    if (selectedArea.contains(areaId)) {
//                        selectedArea.remove(areaId)
//                    } else {
//                        selectedArea.add(areaId)
//                    }
//                    if (btnCheckIvList.getOrNull(index)?.visibility == View.VISIBLE) {
//                        unCheckBtn(index)
//                    } else {
//                        checkBtn(index)
//                    }
//                }
//            }
//        }
//    }
//
//    //计算view大小
//    private fun setSelectViewSize() {
//        post {
//            //底部文字的占用空间
//            val bottomTextPadding = context.resources.getDimension(R.dimen.dp_52).toInt()
//            val viewRealSizeWidth = DisplayUtils.dip2px(context, 280f)
//            val viewRealSizeHeight = DisplayUtils.dip2px(context, 300f) + bottomTextPadding
//            val scale = viewRealSizeWidth.toFloat() / viewRealSizeHeight.toFloat()
//            val viewWidth = width
//            val viewMaxHeight = height
//            var imgLyHeight = 0
//            var imageContainerWidth = 0
//            var imageContainerHeight = 0
//            if (viewWidth / scale > viewMaxHeight) {
//                val width = viewMaxHeight * scale
//                ly_img_container.layoutParams = ly_img_container.layoutParams.apply {
//                    imageContainerWidth = width.toInt()
//                    imageContainerHeight = viewMaxHeight
//                    this.width = imageContainerWidth
//                    this.height = imageContainerHeight
//                    imgLyHeight = (width * 300f / 280f).toInt()
//                }
//
//            } else {
//                ly_img_container.layoutParams = ly_img_container.layoutParams.apply {
//                    imageContainerWidth = viewWidth
//                    imageContainerHeight = (viewWidth / scale).toInt()
//                    this.width = imageContainerWidth
//                    this.height = imageContainerHeight
//                    imgLyHeight = (viewWidth * 300f / 280f).toInt()
//                }
//            }
//            ly_btn_container.layoutParams = ly_btn_container.layoutParams.apply {
//                this.height = imgLyHeight
//            }
//            ly_img_container.visibility = View.VISIBLE
//            ly_btn_container.visibility = View.VISIBLE
////            ly_img_container.post {
////                try {
////                    ly_img_container.visibility = View.VISIBLE
////                    ly_btn_container.visibility = View.VISIBLE
//////                    updateSize()
////                } catch (e: Exception) {
////                    e.printStackTrace()
////                }
////            }
//            ly_img_container.viewTreeObserver.addOnGlobalLayoutListener(object :
//                ViewTreeObserver.OnGlobalLayoutListener {
//                override fun onGlobalLayout() {
//                    // 为什么不用post的时候，这个if永远不对呢
//                    if (ly_img_container.width == imageContainerWidth && ly_img_container.height == imageContainerHeight) {
//                        ly_img_container.viewTreeObserver.removeOnGlobalLayoutListener(this)
//                        updateSize()
//                        onSizeChangeComplete()
//                    }
//                }
//            })
//        }
//    }
//
//    //自适应view大小结束回调
//    private fun onSizeChangeComplete() {
//        hasSizeChangeComplete = true
//        when (pendingSelectGender) {
//            STATUS_MALE -> checkMale()
//            STATUS_FEMALE -> checkFemale()
//        }
//    }
//
//    //根据性别设置btn文字
//    private fun updateBtnList() {
//        if (currStatus == STATUS_MALE) {
//            tv_chest_or_abs.text = context.getString(R.string.chest)
//            tv_abs_or_butt.text = context.getString(R.string.abs)
//        } else {
//            tv_chest_or_abs.text = context.getString(R.string.core)
//            tv_abs_or_butt.text = context.getString(R.string.butt)
//        }
//    }
//
//    fun getStatus(): Int {
//        return currStatus
//    }
//
//    //获取选中的部位
//    fun getSelectedArea(): List<Int> {
//        return selectedArea.distinct()
//    }
//
//    //选中按钮
//    private fun checkBtn(index: Int) {
//        btnCheckIvList.getOrNull(index)?.run {
//            visibility = View.VISIBLE
//            alpha = 1f
//        }
//        btnList.getOrNull(index)?.setBackgroundResource(R.drawable.bg_btn_selected)
//    }
//
//    //未选中按钮
//    private fun unCheckBtn(index: Int) {
//        btnCheckIvList.getOrNull(index)?.visibility = View.GONE
//        btnList.getOrNull(index)?.setBackgroundResource(R.drawable.bg_btn_unselected)
//    }
//
//    //未选中所有按钮
//    private fun unCheckAllBtn() {
//        btnCheckIvList.forEach {
//            it.visibility = View.GONE
//        }
//        btnList.forEach {
//            it.setBackgroundResource(R.drawable.bg_btn_unselected)
//        }
//    }
//
//    //设置size
//    private fun updateSize() {
////        view_male.post {
//        try {
//            val width = ly_img_container.width
//            imageWidth = view_male.width
////                edgeSpace = view_male.x - view_male.translationX
//            middleSpace = width - imageWidth * 2 - edgeSpace * 2
//            maxInitScrollDistance = width / 2 - (edgeSpace + imageWidth / 2)
//            selectedStatusSpace = edgeSpace
//            //imageWidth / 4f是为了抵消缩小后的位移
//            smallFemaleFinalX =
//                width / 2f + imageWidth / 2f + selectedStatusSpace - (imageWidth / 4f)
//            femaleInitX = width / 2f + middleSpace / 2f
//            maleInitX = edgeSpace
//            //imageWidth / 4f是为了抵消缩小后的位移
//            smallMaleFinalX =
//                width / 2f - imageWidth / 2f - selectedStatusSpace - imageWidth + (imageWidth / 4f)
//            maxSelectScrollDistance = maxInitScrollDistance * 2
//            pointAndLines.forEach {
//                it.visibility = View.INVISIBLE
//            }
//            maleTextInitX = width / 4f - tv_male.width / 2f
//            femaleTextInitX = width * 3f / 4f - tv_female.width / 2f
//            // 动画导致y发生变化
//            textInitY = tv_male.y - tv_male.translationY
//        } catch (e: Exception) {
//            e.printStackTrace()
//        }
////        }
//    }
//
//    private fun cancelAllAnim() {
//        view_male.animate().cancel()
//        view_female.animate().cancel()
//        view_male_select.animate().cancel()
//        view_female_select.animate().cancel()
//        delayHandler.removeCallbacksAndMessages(null)
//    }
//
//    override fun onTouchEvent(event: MotionEvent?): Boolean {
//        if (!enableTouch) {
//            return true
//        }
//        if (isRevertAnimRunning) {
//            return true
//        }
//        when (event?.action) {
//            MotionEvent.ACTION_DOWN -> {
//                x1 = event.x
//                y1 = event.y
//                hasMove = false
//            }
//            MotionEvent.ACTION_MOVE -> {
//                if (x1 != DISABLE_X) {
//                    x2 = event.x
//                    y2 = event.y
//                    offset = x2 - x1
//                    if (abs(x2 - x1) >= minMoveDis || abs(y2 - y1) >= minMoveDis) {
//                        hasMove = true
//                    }
//                    updateView()
//                }
//            }
//            MotionEvent.ACTION_UP -> {
//                if (x1 != DISABLE_X) {
//                    if (!hasMove) {
//                        //点击男性
//                        if (isViewClick(view_male, event)) {
//                            if (currStatus != STATUS_MALE) {
//                                offset = maxSelectScrollDistance
//                            } else {
//                                return true
//                            }
//                        }
//                        //点击女性
//                        if (isViewClick(view_female, event)) {
//                            if (currStatus != STATUS_FEMALE) {
//                                offset = -maxSelectScrollDistance
//                            } else {
//                                return true
//                            }
//                        }
//                    }
//                    onScrollEnd()
//                }
//            }
//        }
//        return true
//    }
//
//    private fun isViewClick(view: View, event: MotionEvent?): Boolean {
//        if (event == null) {
//            return false
//        }
//        val location = IntArray(2)
//        view.getLocationOnScreen(location)
//        val left = location[0]
//        val top = location[1]
//        val right = left + view.measuredWidth
//        val bottom = top + view.measuredHeight
//        val x = event.rawX
//        val y = event.rawY
//        if (y >= top && y <= bottom && x >= left
//            && x <= right
//        ) {
//            return true;
//        }
//        return false
//    }
//
//    //整体处于右侧时的动画
//    private fun scrollWhenRight(o: Float) {
//        val offset = abs(o)
//        //男性位移
//        val maleTargetX = maleInitX + offset
//        view_male.x = maleTargetX
//        //女性位移
//        val femaleFinalDistance = smallFemaleFinalX - femaleInitX
//        val femaleTargetX =
//            femaleInitX + femaleFinalDistance * (abs(offset) / maxInitScrollDistance)
//        view_female.x = femaleTargetX
//        val scale = MIN_SCALE + (1 - abs(offset) / maxInitScrollDistance) * (1 - MIN_SCALE)
//        view_female.scaleX = scale
//        view_female.scaleY = scale
//        view_female.alpha = scale
//        //背景
//        val percent = abs(offset) / maxInitScrollDistance
//        view_female_select.alpha = 0f
//        view_male_select.alpha = percent
//        //男性文字位移
//        val maleTextTargetX = maleTargetX + view_male.width / 2f - tv_male.width / 2f
//        tv_male.x = maleTextTargetX
//        //女性文字位移
//        val femaleTextTargetX = femaleTargetX + view_female.width / 2f - tv_female.width / 2f
//        tv_female.x = femaleTextTargetX
//        tv_female.y = textInitY - (view_female.height * (1 - MIN_SCALE) / 2f) * percent
//        tv_female.alpha = 1f - percent
//        tv_female.scaleX = scale
//        tv_female.scaleY = scale
//    }
//
//    //整体处于左侧时的动画
//    private fun scrollWhenLeft(o: Float) {
//        val offset = -abs(o)
//        //女性位移
//        val femaleTargetX = femaleInitX + offset
//        view_female.x = femaleTargetX
//        //男性位移
//        val maleFinalDistance = smallMaleFinalX - maleInitX
//        val maleTargetX = maleInitX + maleFinalDistance * (abs(offset) / maxInitScrollDistance)
//        view_male.x = maleTargetX
//        val scale = MIN_SCALE + (1 - abs(offset) / maxInitScrollDistance) * (1 - MIN_SCALE)
//        view_male.scaleX = scale
//        view_male.scaleY = scale
//        view_male.alpha = scale
//        //背景
//        val percent = abs(offset) / maxInitScrollDistance
//        view_male_select.alpha = 0f
//        view_female_select.alpha = percent
//        //女性文字位移
//        val femaleTextTargetX = femaleTargetX + view_female.width / 2f - tv_female.width / 2f
//        tv_female.x = femaleTextTargetX
//        //男性文字位移
//        val maleTextTargetX = maleTargetX + view_male.width / 2f - tv_male.width / 2f
//        tv_male.x = maleTextTargetX
//        tv_male.y = textInitY - (view_male.height * (1 - MIN_SCALE) / 2f) * percent
//        tv_male.alpha = 1f - percent
//        tv_male.scaleX = scale
//        tv_male.scaleY = scale
//    }
//
//    private fun updateView() {
//        when (currStatus) {
//            STATUS_INIT -> {
//                when {
//                    //初始状态右划
//                    offset > 0 && abs(offset) <= maxInitScrollDistance -> {
//                        scrollWhenRight(offset)
//                    }
//                    //初始状态左划
//                    offset < 0 && abs(offset) <= maxInitScrollDistance -> {
//                        scrollWhenLeft(offset)
//                    }
//                }
//            }
//            STATUS_FEMALE -> {
//                if (offset > 0 && abs(offset) < maxSelectScrollDistance) {
//                    if (abs(offset) <= maxInitScrollDistance) {
//                        scrollWhenLeft(maxInitScrollDistance - offset)
//                    } else {
//                        scrollWhenRight(offset - maxInitScrollDistance)
//                    }
//                }
//            }
//            STATUS_MALE -> {
//                if (offset < 0 && abs(offset) < maxSelectScrollDistance) {
//                    if (abs(offset) <= maxInitScrollDistance) {
//                        scrollWhenRight(maxInitScrollDistance - abs(offset))
//                    } else {
//                        scrollWhenLeft(maxInitScrollDistance - abs(offset))
//                    }
//                }
//            }
//        }
//    }
//
//    //处于右侧时，回到init状态
//    private fun revertToInitWhenRight() {
//        view_male.animate().translationX(0f)
//            .scaleX(1f).scaleY(1f)
//            .alpha(1f).setDuration(ANIM_DURATION).start()
//
//        view_female.animate().translationX(0f)
//            .scaleX(1f).scaleY(1f)
//            .alpha(1f).setDuration(ANIM_DURATION).start()
//
//        view_male_select.animate().alpha(0f).setDuration(ANIM_DURATION).start()
//        view_female_select.animate().alpha(0f).setDuration(ANIM_DURATION).start()
//
//        tv_male.animate().alpha(1f)
//            .scaleX(1f).scaleY(1f)
//            .translationX(0f).translationY(0f).setDuration(ANIM_DURATION).start()
//
//        tv_female.animate().alpha(1f)
//            .scaleX(1f).scaleY(1f)
//            .translationX(0f).translationY(0f).setDuration(ANIM_DURATION).start()
//    }
//
//    //处于右侧时，回到右侧
//    private fun revertToRightWhenRight() {
//        view_male.animate().translationX(maxInitScrollDistance)
//            .scaleX(1f).scaleY(1f)
//            .alpha(1f).setDuration(ANIM_DURATION).start()
//
//        view_female.animate().translationX(smallFemaleFinalX - femaleInitX)
//            .scaleX(MIN_SCALE).scaleY(MIN_SCALE)
//            .alpha(0.5f).setDuration(ANIM_DURATION).start()
//
//        view_male_select.animate().alpha(1f).setDuration(ANIM_DURATION).start()
//        view_female_select.animate().alpha(0f).setDuration(ANIM_DURATION).start()
//
//        tv_male.animate().alpha(1f)
//            .scaleX(1f).scaleY(1f)
//            .translationX(maxInitScrollDistance).translationY(0f).setDuration(ANIM_DURATION).start()
//
//        val femaleTextFinalX =
//            smallFemaleFinalX + view_female.width / 2f - tv_female.width / 2f - femaleTextInitX
//        val femaleTextFinalY = -view_female.height * (1 - MIN_SCALE) / 2f
//        tv_female.animate().alpha(0f)
//            .scaleX(MIN_SCALE).scaleY(MIN_SCALE)
//            .translationX(femaleTextFinalX).translationY(femaleTextFinalY)
//            .setDuration(ANIM_DURATION).start()
//    }
//
//    //处于左侧回到init状态
//    private fun revertToInitWhenLeft() {
//        view_female.animate().translationX(0f)
//            .scaleX(1f).scaleY(1f)
//            .alpha(1f).setDuration(ANIM_DURATION).start()
//
//        view_male.animate().translationX(0f)
//            .scaleX(1f).scaleY(1f)
//            .alpha(1f).setDuration(ANIM_DURATION).start()
//
//        view_male_select.animate().alpha(0f).setDuration(ANIM_DURATION).start()
//        view_female_select.animate().alpha(0f).setDuration(ANIM_DURATION).start()
//
//        tv_male.animate().alpha(1f)
//            .scaleX(1f).scaleY(1f)
//            .translationX(0f).translationY(0f).setDuration(ANIM_DURATION).start()
//
//        tv_female.animate().alpha(1f)
//            .scaleX(1f).scaleY(1f)
//            .translationX(0f).translationY(0f).setDuration(ANIM_DURATION).start()
//    }
//
//    //处于右侧回到init状态
//    private fun revertToLeftWhenLeft() {
//        view_female.animate().translationX(-maxInitScrollDistance)
//            .scaleX(1f).scaleY(1f)
//            .alpha(1f).setDuration(ANIM_DURATION).start()
//
//        view_male.animate().translationX(smallMaleFinalX - maleInitX)
//            .scaleX(MIN_SCALE).scaleY(MIN_SCALE)
//            .alpha(0.5f).setDuration(ANIM_DURATION).start()
//
//        view_female_select.animate().alpha(1f).setDuration(ANIM_DURATION).start()
//        view_male_select.animate().alpha(0f).setDuration(ANIM_DURATION).start()
//
//        tv_female.animate().alpha(1f)
//            .scaleX(1f).scaleY(1f)
//            .translationX(-maxInitScrollDistance).translationY(0f).setDuration(ANIM_DURATION)
//            .start()
//
//        //跟女性从小到大需要移动的距离相同，不再单独进行计算
//        val maleTextFinalX =
//            -(smallFemaleFinalX + view_female.width / 2f - tv_female.width / 2f - femaleTextInitX)
//        val maleTextFinalY = -view_female.height * (1 - MIN_SCALE) / 2f
//        tv_male.animate().alpha(0f)
//            .scaleX(MIN_SCALE).scaleY(MIN_SCALE)
//            .translationX(maleTextFinalX).translationY(maleTextFinalY).setDuration(ANIM_DURATION)
//            .start()
//    }
//
//    private fun onScrollEnd() {
//        cancelAllAnim()
//        isRevertAnimRunning = true
//        x1 = DISABLE_X
//        val duration = 80L
//        delayHandler.postDelayed({
//            isRevertAnimRunning = false
//        }, duration)
//        when (currStatus) {
//            STATUS_INIT -> {
//                when {
//                    //右划未触发状态转换
//                    offset > 0 && abs(offset) <= maxInitScrollDistance / 2 -> {
//                        revertToInitWhenRight()
//                        currStatus = STATUS_INIT
//                    }
//                    //右划触发状态转换
//                    offset > 0 && abs(offset) > maxInitScrollDistance / 2 -> {
//                        revertToRightWhenRight()
//                        currStatus = STATUS_MALE
//                        listener?.onGenderSelect(currStatus)
//                        updateBtnList()
//                    }
//                    //左划未触发状态转换
//                    offset < 0 && abs(offset) <= maxInitScrollDistance / 2 -> {
//                        revertToInitWhenLeft()
//                        currStatus = STATUS_INIT
//                    }
//                    //左划触发状态转换
//                    offset < 0 && abs(offset) > maxInitScrollDistance / 2 -> {
//                        revertToLeftWhenLeft()
//                        currStatus = STATUS_FEMALE
//                        listener?.onGenderSelect(currStatus)
//                        updateBtnList()
//                    }
//                }
//            }
//            STATUS_FEMALE -> {
//                when {
//                    //触发状态转换
//                    abs(offset) > maxSelectScrollDistance / 2 && offset > 0 -> {
//                        revertToRightWhenRight()
//                        currStatus = STATUS_MALE
//                        updateBtnList()
//                    }
//                    //未触发状态转换
//                    abs(offset) <= maxSelectScrollDistance / 2 -> {
//                        revertToLeftWhenLeft()
//                        currStatus = STATUS_FEMALE
//                        updateBtnList()
//                    }
//                }
//            }
//            STATUS_MALE -> {
//                when {
//                    //触发状态转换
//                    abs(offset) > maxSelectScrollDistance / 2 && offset < 0 -> {
//                        revertToLeftWhenLeft()
//                        currStatus = STATUS_FEMALE
//                        updateBtnList()
//                    }
//                    //未触发状态转换
//                    abs(offset) <= maxSelectScrollDistance / 2 -> {
//                        revertToRightWhenRight()
//                        currStatus = STATUS_MALE
//                        updateBtnList()
//                    }
//                }
//            }
//        }
//    }
//
//    //按钮整体动画
//    private fun btnGroupAnim() {
//        val interval = 80L
//        val dp30 = DisplayUtils.dip2px(context, 30f).toFloat()
//        val lineList = when (currStatus) {
//            STATUS_MALE -> maleLineList
//            STATUS_FEMALE -> femaleLineList
//            else -> mutableListOf()
//        }
//        btnList.withIndex().forEach { (index, view) ->
//            view.alpha = 0f
//            view.x = -dp30
//            val sp18 = context.sp2px(18f).toFloat()
//            val textSize = Math.min(sp18, view.height / 2.5f)
//            view.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize)
//            if (view != tv_full_body) {
//                view.visibility = View.VISIBLE
//            }
//
//            view.animate().alpha(1f).translationX(0f).setDuration(ANIM_DURATION)
//                .setStartDelay(interval * index).setListener(object : AnimatorListenerAdapter() {
//                    override fun onAnimationEnd(animation: Animator?) {
//                        try {
//                            view.animate().setListener(null)
//                            lineList.getOrNull(index - 1)?.run {
//                                alpha = 0f
//                                visibility = View.VISIBLE
//                                animate().alpha(1f).setDuration(ANIM_DURATION).start()
//                            }
//                        } catch (e: Exception) {
//                            e.printStackTrace()
//                        }
//                    }
//                }).start()
//        }
//        btnCheckIvList.withIndex().forEach { (index, view) ->
//            if (isIndexSelected(index, currStatus)) {
//                view.alpha = 0f
//                view.x = -dp30 + tv_full_body.width
//                view.visibility = View.VISIBLE
//                view.animate().alpha(1f).translationX(0f).setDuration(ANIM_DURATION)
//                    .setListener(object : AnimatorListenerAdapter() {
//                        override fun onAnimationEnd(animation: Animator?) {
//                            view.animate().translationX(0f).setDuration(0).setDuration(0).start()
//                            view.animate().setListener(null)
//                        }
//                    }).setStartDelay(interval * index).start()
//            }
//        }
//        animHandler.postDelayed({
//            //检查按钮选中状态
////            setBtnStatusByList(currStatus)
//            isBtnAnimRunning = false
//        }, ANIM_DURATION * 2)
//    }
//
//    //根据当前按钮的index获取areaid
//    private fun getAreaIdByIndex(index: Int, status: Int): Int {
//        return if (status == STATUS_MALE) {
//            when (index) {
//                0 -> WorkoutConst.BodyPart.FULL_BODY
//                1 -> WorkoutConst.BodyPart.ARM
//                2 -> WorkoutConst.BodyPart.CHEST
//                3 -> WorkoutConst.BodyPart.ABS
//                else -> WorkoutConst.BodyPart.LEG
//            }
//        } else {
//            when (index) {
//                0 -> WorkoutConst.BodyPart.FULL_BODY
//                1 -> WorkoutConst.BodyPart.ARM
//                2 -> WorkoutConst.BodyPart.ABS
//                3 -> WorkoutConst.BodyPart.BUTT
//                else -> WorkoutConst.BodyPart.LEG
//            }
//        }
//    }
//
//    //当前按钮的index是否被选中
//    private fun isIndexSelected(index: Int, status: Int): Boolean {
//        return selectedArea.contains(getAreaIdByIndex(index, status))
//    }
//
//    fun onNext() {
//        if (!enableTouch) {
//            return
//        }
//        //性别改变，重置btn状态
//        if (currStatus != statusWhenSelectFocusArea && !hasSetDefSelectedArea) {
//            selectedArea.clear()
//            unCheckAllBtn()
//        }
//        hasSetDefSelectedArea = false
//        statusWhenSelectFocusArea = currStatus
//        val width = ly_img_container.width
//        when {
//            currStatus == STATUS_MALE && view_male.scaleX == 1f -> {
//                enableTouch = false
//                view_female.animate().alpha(0f).setDuration(ANIM_DURATION_NEXT).start()
//                view_male_select.animate().alpha(0f).setDuration(ANIM_DURATION_NEXT).start()
//                view_female_select.animate().alpha(0f).setDuration(ANIM_DURATION_NEXT).start()
//                view_male.animate().translationX(width - imageWidth.toFloat() + imageWidth * 0.12f)
//                    .setDuration(ANIM_DURATION_NEXT).start()
//                tv_male.animate().translationX(width - imageWidth.toFloat() + imageWidth * 0.12f)
//                    .alpha(0f).setDuration(ANIM_DURATION_NEXT).start()
//                startBtnAnim()
//            }
//            currStatus == STATUS_FEMALE && view_female.scaleX == 1f -> {
//                enableTouch = false
//                view_male.animate().alpha(0f).setDuration(ANIM_DURATION_NEXT).start()
//                view_male_select.animate().alpha(0f).setDuration(ANIM_DURATION_NEXT).start()
//                view_female_select.animate().alpha(0f).setDuration(ANIM_DURATION_NEXT).start()
//                view_female.animate().translationX(edgeSpace).setDuration(ANIM_DURATION_NEXT)
//                    .start()
//                tv_female.animate().translationX(edgeSpace)
//                    .alpha(0f).setDuration(ANIM_DURATION_NEXT).start()
//                startBtnAnim()
//            }
//        }
//    }
//
//    //选中男性
//    fun checkMale() {
//        currStatus = STATUS_MALE
//        if (hasSizeChangeComplete) {
//            revertToRightWhenRight()
//            updateBtnList()
//            listener?.onGenderSelect(currStatus)
//        } else {
//            pendingSelectGender = STATUS_MALE
//        }
//    }
//
//    //选中女性
//    fun checkFemale() {
//        currStatus = STATUS_FEMALE
//        if (hasSizeChangeComplete) {
//            revertToLeftWhenLeft()
//            updateBtnList()
//            listener?.onGenderSelect(currStatus)
//        } else {
//            pendingSelectGender = STATUS_FEMALE
//        }
//    }
//
//    //选中按钮列表
//    fun setSelectedArea(checkedList: MutableList<Int>?) {
//        selectedArea.clear()
//        hasSetDefSelectedArea = !checkedList.isNullOrEmpty()
//        checkedList?.let {
//            selectedArea.addAll(checkedList)
//        }
//
//    }
//
//    //返回上个状态
//    fun backToGenderSelect(backStatus: Int): Boolean {
//        if (isBackAnimRunning || isRevertAnimRunning || isBtnAnimRunning) {
//            return false
//        }
//        val dp30 = context.dp2px(30f).toFloat()
//        if (!enableTouch) {
//            isBackAnimRunning = true
//            btnList.withIndex().forEach { (index, btn) ->
//                btn.animate().translationX(-dp30).alpha(0f).setDuration(ANIM_DURATION)
//                    .setListener(object : AnimatorListenerAdapter() {
//                        override fun onAnimationStart(animation: Animator?) {
//                            try {
//                                when (currStatus) {
//                                    STATUS_MALE -> {
//                                        maleLineList.getOrNull(index)?.let { lineView ->
//                                            lineView.animate().translationX(-dp30).alpha(0f)
//                                                .setDuration(ANIM_DURATION)
//                                                .setListener(object : AnimatorListenerAdapter() {
//                                                    override fun onAnimationEnd(animation: Animator?) {
//                                                        try {
//                                                            lineView.animate().setListener(null)
//                                                            lineView.animate().translationX(0f)
//                                                                .setDuration(0).start()
//                                                        } catch (e: Exception) {
//                                                            e.printStackTrace()
//                                                        }
//                                                    }
//                                                }).start()
//                                        }
//                                    }
//                                    STATUS_FEMALE -> {
//                                        femaleLineList.getOrNull(index)?.let { lineView ->
//                                            lineView.animate().translationX(-dp30).alpha(0f)
//                                                .setDuration(ANIM_DURATION)
//                                                .setListener(object : AnimatorListenerAdapter() {
//                                                    override fun onAnimationEnd(animation: Animator?) {
//                                                        try {
//                                                            lineView.animate().setListener(null)
//                                                            lineView.animate().translationX(0f)
//                                                                .setDuration(0).start()
//                                                        } catch (e: Exception) {
//                                                            e.printStackTrace()
//                                                        }
//                                                    }
//                                                }).start()
//                                        }
//                                    }
//                                }
//                            } catch (e: Exception) {
//                                e.printStackTrace()
//                            }
//                        }
//
//                        override fun onAnimationEnd(animation: Animator?) {
//                            try {
//                                btn.visibility = View.INVISIBLE
//                                btn.animate().setListener(null)
//                            } catch (e: Exception) {
//                                e.printStackTrace()
//                            }
//                        }
//                    }).start()
//            }
//            val interval = 80L
//            btnCheckIvList.withIndex().forEach { (index, btn) ->
//                btn.animate().translationX(-dp30).alpha(0f).setDuration(ANIM_DURATION)
//                    .setListener(object : AnimatorListenerAdapter() {
//                        override fun onAnimationEnd(animation: Animator?) {
//                            btn.animate().translationX(0f).setDuration(0).start()
//                            btn.animate().setListener(null)
//                        }
//                    }).setStartDelay(interval * index).start()
//            }
//            animHandler.postDelayed({
//                try {
//                    when (backStatus) {
//                        STATUS_MALE -> {
//                            revertToRightWhenRight()
//                        }
//                        STATUS_FEMALE -> {
//                            revertToLeftWhenLeft()
//                        }
//                    }
//                    animHandler.postDelayed({
//                        try {
//                            enableTouch = true
//                            isBackAnimRunning = false
//                        } catch (e: Exception) {
//                            e.printStackTrace()
//                        }
//                    }, ANIM_DURATION)
//                } catch (e: Exception) {
//                    e.printStackTrace()
//                }
//            }, ANIM_DURATION * 2)
//        }
//        return true
//    }
//
//    override fun onDetachedFromWindow() {
//        super.onDetachedFromWindow()
//        scope.cancel()
//        listener = null
//    }
//
//    //开始按钮显示动画
//    private fun startBtnAnim() {
//        isBtnAnimRunning = true
//        animHandler.postDelayed({
//            try {
//                btnGroupAnim()
//            } catch (e: Exception) {
//                e.printStackTrace()
//            }
//        }, ANIM_DURATION_NEXT - 300)
//    }
//
//    interface GenderSelectViewListener {
//        fun onGenderSelect(gender: Int)
//    }
//}